'use strict';
const db = uniCloud.database();
const SMS_EXPIRE = 300000;

exports.main = async (event, context) => {
  const { mobile, code } = event;

  try {
    // 查询用户信息（只查询必要字段）
    const { data } = await db.collection('user')
      .where({ mobile })
      .field({
        _id: true,
        mobile: true,
        username: true,
        avatar: true,
        score: true,
        dan: true,
        loginCount: true,
        lastLogin: true,
        status: true,
        code: true,
        codeTime: true
      })
      .get();

    if (data.length === 0) {
      return { code: 4004, msg: '用户不存在' };
    }

    const user = data[0];
    
    // 状态检查（不影响验证码验证流程）
    if (user.status === 0) {
      // 先验证验证码是否正确（防止通过错误提示判断用户是否存在）
      if (user.code !== code) {
        return { code: 4002, msg: '验证码错误' };
      }
      return { 
        code: 4005, 
        msg: '该账号已被停用，预计1-7个工作日解封',
        data: {
          banTime: user.banTime || null
        }
      };
    }

    const now = Date.now();

    // 验证验证码
    if (user.code !== code) {
      return { code: 4002, msg: '验证码错误' };
    }

    if (now - user.codeTime > SMS_EXPIRE) {
      return { code: 4003, msg: '验证码已过期' };
    }

    // 更新登录信息（使用原子操作确保数据一致性）
    const updateRes = await db.collection('user')
      .doc(user._id)
      .update({
        loginCount: db.command.inc(1),
        lastLogin: now,
        code: db.command.remove()
      });

    // 构造安全返回的用户信息（过滤敏感字段）
    const userInfo = {
      _id: user._id,
      mobile: user.mobile,
      username: user.username,
      avatar: user.avatar,
      score: user.score,
      dan: user.dan,
      status: user.status, // 新增状态返回
      loginCount: user.loginCount + 1,
      lastLogin: formatDate(now)
    };

    return { 
      code: 200, 
      msg: '登录成功',
      data: userInfo
    };
  } catch (e) {
    console.error('登录失败:', e);
    // 保持原有错误处理逻辑不变
    return { code: 5002, msg: '登录失败，请重试' };
  }
};

// 保持原有工具函数不变
function formatDate(timestamp) {
  const date = new Date(timestamp);
  const pad = (n) => n.toString().padStart(2, '0');
  return `${date.getFullYear()}-${pad(date.getMonth()+1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}`;
}